Code for the Chess Game

We've covered different aspects of the chess game and observed the attributes attached to the problem using various UML diagrams. Let's now explore the more practical side of things where we will work on implementing the chess game using multiple languages. This is usually the last step in an object-oriented design interview process.

We have chosen the following languages to write the skeleton code of the different classes present in the chess game:

  • Java

  • C#

  • Python

  • C++

  • JavaScript

Chess game classes#

In this section, we will provide the skeleton code of the classes designed in the class diagram lesson.

Note: For simplicity, we are not defining getter and setter functions. The reader can assume that all class attributes are private and accessed through their respective public getter methods and modified only through their public method functions.

Enumerations and custom data type#

The following code provides the definition of the enumeration and custom data type used in the chess game.

GameStatus: This enumeration keeps track of the active status of the player and the game, i.e, who wins and whether or not the game is a draw.

AccountStatus: We need to create an enumeration to keep track of the status of the account – whether it is active, canceled, closed, blocked, or none.

The Person class is used as a custom data type. The implementation of the Person class can be found below:

Note: JavaScript does not support enumerations, so we will be using the Object.freeze() method as an alternative that freezes an object and prevents further modifications.

Definition of enums and custom data types

Box and chessboard #

The Box class holds the piece where the Chessboard contains the boxes and has the functionality of updating or resetting the board. The definitions of these classes are provided below:

The Box and Chessboard classes

Piece #

Piece is an abstract class that is extended by King, Queen, Knight, Bishop, Rook and Pawn. These derived classes override the canMove() function of Piece. The definitions of these classes are provided below:

The Piece class and its derived classes

Move#

The Move class represents the move that will be taken by the player. It can tell the source and destiation box of the active Piece and whether or not it was a castling move. It also identifies the captured piece. The definitions of these classes are provided below:

The Move class

Account, player, and admin#

The Account class is extended by the Player and Admin classes.

  • The Player class records the player's information by storing the Person object, along with the chosen color, i.e., – whether or not the player is playing with white pieces.

  • The Admin class decides whether or not the user is blocked.

The definitions of these classes are provided below:

The Account class and its derived classes

Chess move controller and the game view #

The ChessMoveController class validates the moves and responds accordingly. The ChessGameView class represents the game view. The definitions of these classes are provided below:

The ChessMoveController and ChessGameView classes

Chess game #

The ChessGame class represents the current situation of the game while keeping track of turns and moves, and also decides when the game ends. The definition of this class is provided below:

The ChessGame class

Wrapping up#

We've explored the complete design of the chess game in this chapter. We've looked at how a basic chess game can be visualized using various UML diagrams and designed using object-oriented principles and design patterns.

Activity Diagram for the Chess Game

Getting Ready: The Hotel Management System